package com.zrf.base.knowledge.java;

/**
 * Integer基础
 * @author zhouruifeng
 *         create at 2017/3/12.
 */
public final class IntegerBase {

    private IntegerBase(){

    }

    /**
     * 测试java 正常 ++ 和 +=和赋值哪种报错
     */
    public static void incrementYichu(){
        Integer i = Integer.MAX_VALUE;
        /**
         * 打印int的最大值
         * 2147483647
         * 二进制值为
         * 1111111111111111111111111111111
         */
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        /**
         * 对i进行++之后看i的值，并且看类型
         * 之后打印i的值并且看二进制值
         * -2147483648
         * 10000000000000000000000000000000
         * i的最大值++后并没有报错，直接对二进制进行+1
         */
        i++;
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        /**
         * 将i重新赋值成integer的最大值
         * 之后对i进行+=10之后看i的值并且查看二进制
         * -2147483639
         * 10000000000000000000000000001001
         * 跟++是一样同样不会报错，也是对二进制进行+1
         */
        i = Integer.MAX_VALUE;
        i += 10;
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        /**
         * 重新对i赋值
         * 之后设置i=i+10查看是否报错
         * 结果同上一样也没有报错
         */
        i = Integer.MAX_VALUE;
        i = i + 10;
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        /**
         * 上面不报错是可能是因为进位符号位，所以尝试下对最小值进行操作
         */
        i = Integer.MIN_VALUE;
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));

        /**
         * -1的二进制是32个1对这进行+1看下是什么情况
         */
        i += Integer.MAX_VALUE;
        System.out.println(i);
        System.out.println(Integer.toBinaryString(i));
        i += 1;
        System.out.println(i); //之后结果是0，进行的操作时直接二进制+1并且丢弃首位也不会报错
        System.out.println(Integer.toBinaryString(i));

    }

    /**
     * main方法
     * @param args 参数
     */
    public static void main(String[] args) {
        incrementYichu();
    }
}
